﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Entities;
using System.Data.SqlClient;
using Persistencia.Interfaces;

namespace GestorDeFlotasModelo.Factorias
{
    public class FactoriaChoferXAuto : Factoria, IIdentityFactory
    {
          private FactoriaChoferXAuto(TransaccionBase tran)
            : base(tran)
        {
        }
       

        public override string NombreTabla
        {
            get { return " NUESTRA_RUBIA_ES_MEJOR.ChoferPorAuto "; }
        }

        protected override IPersistibleModelo NuevoPersistible(HashTableNCSensitive htsNc)
        {
            return new ChoferXAuto();
        }

        protected override string Id(HashTableNCSensitive hts)
        {
            return hts["ChoferPorAuto_Id"].ToString();
        }

        protected override HashTableNCSensitive ParametrosClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            parameters.Add("ChoferPorAuto_Id", null);
            return parameters;
           
        }

        protected override HashTableNCSensitive ParametrosNoClave()
        {
            HashTableNCSensitive parameters = new HashTableNCSensitive();
            parameters.Add("ChoferPorAuto_Auto", null);
            parameters.Add("ChoferPorAuto_Chofer", null);
            parameters.Add("ChoferPorAuto_Turno", null);
            parameters.Add("ChoferPorAuto_Fecha", null);
            return parameters;

        }


        protected override Predicate<IPersistibleModelo> FiltroXId(string id)
        {
            return delegate(IPersistibleModelo iPer)
            {
                return ((ChoferXAuto)iPer).Id == long.Parse(id);
            };
        }

        public List<ChoferXAuto> SelectXFiltro(Chofer chofer, Auto auto, Turno turno,bool soloHabilitados)
        {
            SqlCommand comm = new SqlCommand();
            string consulta = "SELECT * FROM " + this.NombreTabla + " WHERE 1=1 ";

            if (chofer != null)
            {
                consulta += " AND ChoferPorAuto_Chofer=@ChoferPorAuto_Chofer ";
                comm.Parameters.AddWithValue("@ChoferPorAuto_Chofer", chofer.Id);
            }

            if (auto != null)
            {
                consulta += " AND ChoferPorAuto_Auto=@ChoferPorAuto_Auto ";
                comm.Parameters.AddWithValue("@ChoferPorAuto_Auto", auto.Id);
            }

            if (turno != null)
            {
                consulta += " AND ChoferPorAuto_Turno=@ChoferPorAuto_Turno ";
                comm.Parameters.AddWithValue("@ChoferPorAuto_Turno", turno.Id);
            }

            consulta += " ORDER BY ChoferPorAuto_Fecha DESC";
            comm.CommandText = consulta;
            List<ChoferXAuto> choferes= base.Select<ChoferXAuto>(comm, delegate(IPersistibleModelo iPer)
            {
                return (((chofer == null) || (((ChoferXAuto)iPer).Chofer.Id == chofer.Id)) &&
                        ((auto == null) || ((((ChoferXAuto)iPer).Auto.Id == auto.Id))) &&
                        ((turno == null) || ((((ChoferXAuto)iPer).Turno.Id == turno.Id))) &&
                        ((!soloHabilitados) || (((ChoferXAuto)iPer).Habilitado)));

            });


            return choferes;
        }


        public ChoferXAuto Nuevo(Chofer chofer, Auto auto, Turno turno)
        {
            ChoferXAuto cxa = new ChoferXAuto();
            cxa.Chofer = chofer;
            cxa.Auto = auto;
            cxa.Turno = turno;
            cxa.FechaAsignacion = DateTime.Now;
            base.Agregar(cxa);
            return cxa;
        }
    }
}
